# 自省是指这种能力：检查某些事物以确定它是什么、它知道什么以及它能做什么。

# 1.type:返回一个对象的类型


def a():
    pass


print(type('111'))
print(type(a))
print(type(int.__bases__))
print(type(object))
print(type(type))

# 2.dir:列出对象所拥用的属性和方法，返回一个列表
print(dir(a))

# 3.str:hasattr() getattr() setattr()


class Person(object):
    def __init__(self):
        self.name = 'Ak'
        self.__age = 18

    def go_to_school(self):
        print('you can speak chinese?')


wl = Person()
# hasattr(obj, attr): 检查obj是否含有一个名为attr的属性，返回一个布尔值
print(hasattr(wl, '__age'))  # False
print(hasattr(wl, 'name'))   # True
print(hasattr(Person, '__new__'))  # True

# getattr(obj, attr, default):  返回obj中attr属性的属性值
print(getattr(wl, 'name'))          # Ak
print(getattr(wl, '__age', 18))     # 18
print(getattr(Person, '__init__'))  # <function Person.__init__ at 0x0000028F317E0550>


# setattr(obj, attr， val): 给obj中名为attr的属性赋值为val
setattr(wl, 'name', 'AKS')
setattr(wl, 'sex', '男')
print(wl.name)  # AKS
print(wl.sex)   # 男